home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / database / msgobj10.zip / MSGOBJ.CPP < prev    next >
C/C++ Source or Header  |  1993-03-17  |  6KB  |  226 lines

  1. // MSGOBJ.CPP: private functions
  2.  
  3. #include <ctype.h>
  4. #include <dos.h>
  5. #include <fcntl.h>
  6. #include <io.h>
  7. #include <iostream.h>
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <string.h>
  11. #ifdef __WINDOWS__
  12. #include <windows.h>
  13. #endif
  14. #include "config.h"
  15. #include "msgobj.h"
  16.  
  17.  
  18. int message_frame::open_area(void)
  19. {
  20.   lasterror=MSGERR_NOERR;
  21.   if(area==-1)
  22.     {
  23.       lasterror=MSGERR_ENOAREASEL;
  24.       return -1;
  25.     }
  26.   if(current_area==area) return 0;
  27.   close_area();
  28.   switch(AREATYPE(area))
  29.     {
  30.       case 0:
  31.         sprintf(fname,"%sMpkt%04x.Pip",AREAPATH(area),area);
  32.         #ifdef DEBUG
  33.           cout << "Opening " << fname << "\n";
  34.         #endif
  35.         #ifdef __WINDOWS__
  36.           filepkt=OpenFile(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  37.         #else
  38.           filepkt=open(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  39.         #endif
  40.         if(filepkt==-1)
  41.           {
  42.             lasterror=MSGERR_ENOFILE;
  43.             return -1;
  44.           }
  45.         sprintf(fname,"%sMptr%04x.Pip",AREAPATH(area),area);
  46.         #ifdef DEBUG
  47.           cout << "Opening " << fname << "\n";
  48.         #endif
  49.         #ifdef __WINDOWS__
  50.           fileptr=OpenFile(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  51.         #else
  52.           fileptr=open(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  53.         #endif
  54.         if(fileptr==-1)
  55.           {
  56.             lasterror=MSGERR_ENOFILE;
  57.             return -1;
  58.           }
  59.         sprintf(fname,"%sDestPtr.Pip",AREAPATH(area));
  60.         #ifdef DEBUG
  61.           cout << "Opening " << fname << "\n";
  62.         #endif
  63.         #ifdef __WINDOWS__
  64.           filedest=OpenFile(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  65.         #else
  66.           filedest=open(fname,O_BINARY|O_CREAT|O_RDWR|O_DENYALL);
  67.         #endif
  68.         if(filedest==-1)
  69.           {
  70.             lasterror=MSGERR_ENOFILE;
  71.             return -1;
  72.           }
  73.         break;
  74.       default:
  75.         lasterror=MSGERR_NOTIMPL;
  76.         return -1;
  77.     }
  78.   current_area=area;
  79.   current_msg=-1; 
  80.   return 0;
  81. }
  82.  
  83.  
  84. int message_frame::close_area(void)
  85. {
  86.   if(current_area==-1)
  87.     {
  88.       lasterror=MSGERR_ENOAREAOPEN;
  89.       return -1;
  90.     }
  91.   switch(AREATYPE(area))
  92.     {
  93.       case 0:
  94.         close(filepkt);
  95.         close(fileptr);
  96.         close(filedest);
  97.         break;
  98.       default:
  99.         lasterror=MSGERR_NOTIMPL;
  100.         return -1;
  101.     }
  102.   #ifdef DEBUG
  103.     cout << "Closing area " << current_area << "\n";
  104.   #endif
  105.   current_area=-1;
  106.   current_msg=-1;
  107.   lasterror=MSGERR_NOERR;
  108.   return 0;
  109. }
  110.  
  111.  
  112. int message_frame::pip_msg_post(char huge*text,char*from,char*to1,char*subj,unsigned int attr,address_class fromaddr,address_class destaddr,int modify,char *tearline,char *origin)
  113. {
  114.   MSGPTR hdr;
  115.   MSGPKTHDR mpkt;
  116.   DESTPTR pt;
  117.   char to[36],date[20],fn[80];
  118.   struct date dt;
  119.   struct time tm;
  120.   mpkt.fromnode=fromaddr.node;
  121.   mpkt.fromnet=fromaddr.net;
  122.   mpkt.pktype=10 /*2*/ ;
  123.   mpkt.attribute=attr|SET_PKT_LOCAL; /* from us */
  124.   strcpy(to,to1);
  125.   if (!stricmp(AREATAG(area),"#NETMAIL"))
  126.     {
  127.       if(*destaddr.uucp)
  128.         {
  129.           destaddr.zone=UUCPZONE;
  130.           destaddr.net=UUCPNET;
  131.           destaddr.node=UUCPNODE;
  132.           destaddr.point=0;
  133.           strcpy(to,"UUCP");
  134.         }
  135.       mpkt.tonode=destaddr.node;
  136.       mpkt.tonet=destaddr.net;
  137.       mpkt.point=destaddr.point;
  138.     }
  139.   else
  140.     {
  141.       mpkt.tonode=0;
  142.       mpkt.tonet=0;
  143.       mpkt.point=0;
  144.     }
  145.   lseek(filepkt,filelength(filepkt)-2,SEEK_SET); hdr.pos=tell(filepkt);
  146.   hdr.next=hdr.prev=0;
  147.   hdr.status=SET_MPTR_FROMUS; /* from us */
  148.   if(modify==-1)
  149.     lseek(fileptr,filelength(fileptr),SEEK_SET);
  150.   else
  151.     lseek(fileptr,modify*sizeof(hdr),SEEK_SET);
  152.   pt.area=area;
  153.   pt.msg=tell(fileptr)/sizeof(hdr);
  154.   strcpy(pt.to,to);
  155.   pt.next=0;
  156.   write(fileptr,&hdr,sizeof hdr);
  157.   write(filepkt,&mpkt,sizeof mpkt);
  158.   getdate(&dt); gettime(&tm);
  159.   sprintf(date,"%02d %3s %02d  %02d:%02d:%02d",dt.da_day,mname[dt.da_mon-1],dt.da_year%100,tm.ti_hour,tm.ti_min,tm.ti_sec);
  160.   write0((unsigned char*)date,filepkt);
  161.   write0((unsigned char*)to,filepkt);
  162.   write0((unsigned char*)from,filepkt);
  163.   write0((unsigned char*)subj,filepkt);
  164.   if (!stricmp(AREATAG(area),"#NETMAIL"))
  165.     {
  166.       if(destaddr.zone!=MYZONE)
  167.         {
  168.           sprintf(fn,"\1INTL %d:%d/%d %d:%d/%d\r",destaddr.zone,destaddr.net,destaddr.node,fromaddr.zone,fromaddr.net,fromaddr.node);
  169.           write(filepkt,fn,strlen(fn));
  170.         }
  171.       if(destaddr.point)
  172.         {
  173.           sprintf(fn,"\1TOPT %d\r",destaddr.point);
  174.           write(filepkt,fn,strlen(fn));
  175.         }
  176.       if(fromaddr.point)
  177.         {
  178.           sprintf(fn,"\1FMPT %d\r",fromaddr.point);
  179.           write(filepkt,fn,strlen(fn));
  180.         }
  181.     }
  182.   if (*AREATAG(area)!='#') /* echomail area */
  183.     {
  184.       if(find_origin(text)==NULL)
  185.         {
  186.           if(!tearline)
  187.             tearline="--- MsgObj\r";
  188.           if(!origin)
  189.             origin="Origin line unspecified. Added by MessageObject";
  190.           sprintf(fn,"--- %s\r",tearline);
  191.           strcat(text,fn);
  192.           sprintf(fn," * Origin: %s (%d:%d/%d.%d",origin,fromaddr.zone,fromaddr.net,fromaddr.node,fromaddr.point);
  193.           if(strlen(fn)>77)
  194.             sprintf(fn," * Origin: Original origin line too long! (%d:%d/%d.%d)\r",fromaddr.zone,fromaddr.net,fromaddr.node,fromaddr.point);
  195.           strcat(text,fn);
  196.           if (strlen(fn)+strlen(fromaddr.domain)<77)
  197.             sprintf(fn,"@%s)\r",fromaddr.domain);
  198.           else
  199.             sprintf(fn,")\r");
  200.           strcat(text,fn);
  201.         }
  202.     }
  203.   if(*destaddr.uucp)
  204.     {
  205.       sprintf(fn,"To: %s\r\n\r",destaddr.uucp);
  206.       write(filepkt,fn,strlen(fn));
  207.      }
  208.   pipstring((unsigned char*)text,filepkt);
  209.   write(filepkt,"\0\0",2);
  210.   lseek(filedest,filelength(filedest),SEEK_SET);
  211.   write(filedest,&pt,sizeof pt);
  212.   return 0;
  213. }
  214.  
  215.  
  216. int message_frame::not_in_seen_by(AUDIT *seen_by,uint net,uint node,uint point,int totnr)
  217. {
  218.   int i;
  219.   for (i=0; i!=totnr; i++,seen_by++)
  220.     if ((seen_by->net==net) && (seen_by->node==node) && (seen_by->point==point)) return 0;
  221.   return -1;
  222. }
  223.  
  224.  
  225.  
  226.